package com.shanzhe.eshop.common.jdk;

import java.util.LinkedList;

/**
 * @Author yinwei
 * @create 2021/10/10
 * @Version 1.0
 */
public class MyQueue {

    private static final int MAX_SIZE = 100;

    private LinkedList<String> queue = new LinkedList<String>();

    public synchronized void offer(String element){
        try {
            if(queue.size()==MAX_SIZE){
                //一个线程走到这里就已经获取一把锁 但是队列已经满了，说明已经获取到一把锁了
                //wait就是说让这个线程进入等待的状态，最主要的是这个线程会释放掉锁
                wait();
            }
            queue.add(element);
            notifyAll();
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    public synchronized String take(){
        String element = "";
        try {
            if(queue.size()==0){
                wait();
            }
            //别的线程可以从队列里take数据
            element =  queue.removeFirst();

            //唤醒当前在等待这个锁的线程----只要有队列出队就可以唤醒等待的线程继续offer队列
            notifyAll();
        }catch (Exception e){
            e.printStackTrace();
        }
        return element;
    }
}
